package br.com.foxline.atlasmobile;

import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import br.com.foxline.atlasmobile.dao.AnnexDao;
import br.com.foxline.atlasmobile.dao.DimensaoDao;
import br.com.foxline.atlasmobile.dao.ImovelDao;
import br.com.foxline.atlasmobile.entities.Annex;
import br.com.foxline.atlasmobile.entities.Dimensao;
import br.com.foxline.atlasmobile.entities.Imovel;
import br.com.foxline.atlasmobile.entities.Proprietario;
import br.com.foxline.atlasmobile.enums.Caracterizacao;
import br.com.foxline.atlasmobile.enums.Cobertura;
import br.com.foxline.atlasmobile.enums.Comando;
import br.com.foxline.atlasmobile.enums.DominioTerra;
import br.com.foxline.atlasmobile.enums.EstadoConservacao;
import br.com.foxline.atlasmobile.enums.Estrutura;
import br.com.foxline.atlasmobile.enums.Fachada;
import br.com.foxline.atlasmobile.enums.Forro;
import br.com.foxline.atlasmobile.enums.InstSanitaria;
import br.com.foxline.atlasmobile.enums.InstalacoesEletricas;
import br.com.foxline.atlasmobile.enums.Ocupacao;
import br.com.foxline.atlasmobile.enums.Patrimonio;
import br.com.foxline.atlasmobile.enums.Pedologia;
import br.com.foxline.atlasmobile.enums.Piso;
import br.com.foxline.atlasmobile.enums.Posicao;
import br.com.foxline.atlasmobile.enums.RevExterno;
import br.com.foxline.atlasmobile.enums.SituacaoImovel;
import br.com.foxline.atlasmobile.enums.SituacaoTerreno;
import br.com.foxline.atlasmobile.enums.TipoConstrucao;
import br.com.foxline.atlasmobile.enums.TipoDocumentoImovel;
import br.com.foxline.atlasmobile.enums.Topografia;
import br.com.foxline.atlasmobile.enums.UsoImovel;
import br.com.foxline.atlasmobile.enums.Utilizacao;
import br.com.foxline.atlasmobile.enums.Vinculo;
import br.com.foxline.atlasmobile.handler.CaptureActivity;

public class InfoGeralActivity extends Activity {

	private static String IMOVEL = "getimovel";

	// DAO
	private ImovelDao imovelDao;
	private AnnexDao annexDao;
	private DimensaoDao dimensaoDao;

	private Imovel imovel;

	private Dimensao dimensao;

	private Integer cont;
	private Integer contgps = 0;
	private static Integer MAX = 45;

	private RadioGroup radioGroup;
	private LinearLayout linearLayout;
	private EditText editText;
	private TextView textTitle;

	private Integer checkId;

	private Integer aux;

	private LocationManager lManager;
	private LocationListener lListener;

	private Cobertura cobertura;
	private Comando comando;
	private EstadoConservacao estadoConservacao;
	private Estrutura estrutura;
	private Fachada fachada;
	private Forro forro;
	private InstalacoesEletricas instalacoesEletricas;
	private InstSanitaria instSanitaria;
	private Ocupacao ocupacao;
	private Patrimonio patrimonio;
	private Pedologia pedologia;
	private Piso piso;
	private Posicao posicao;
	private RevExterno revExterno;
	private SituacaoTerreno situacaoTerreno;
	private TipoConstrucao tipoConstrucao;
	private Topografia topografia;
	private UsoImovel usoImovel;
	private Utilizacao utilizacao;
	private Caracterizacao caracterizacao;

	private Annex annex;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_info_geral);

		imovelDao = new ImovelDao(getApplicationContext());
		annexDao = new AnnexDao(getApplicationContext());
		dimensaoDao = new DimensaoDao(getApplicationContext());

		if (getIntent().getSerializableExtra(IMOVEL) != null) {
			imovel = (Imovel) getIntent().getSerializableExtra(IMOVEL);

			if (imovel.getDimensoes() != null) {
				dimensao = imovel.getDimensoes();
			} else {
				dimensao = new Dimensao();
			}
		} else {
			imovel = new Imovel();
			dimensao = new Dimensao();
		}

		List<Object> list = new ArrayList<Object>();
		list.add(cobertura);

		linearLayout = (LinearLayout) findViewById(R.id.linearMain);
		textTitle = (TextView) findViewById(R.id.textTitle);
		initComponents();
		cont = 1;

		if (getIntent().getBooleanExtra("last", false)) {
			cont = MAX;
		}

		chooseOne(false);

		startGPS();
	}

	public void getSelect() {

		switch (cont) {
//		case 25:
//			// Área do Terreno");
//			dimensao.setAreaTerreno(convert(editText.getText().toString()));
//			break;
//		case 26:
//			// Área da Unidade");
//			dimensao.setAreaUnidade(convert(editText.getText().toString()));
//			break;
//		case 27:
//			// "Área Total da Edificação");
//			dimensao.setAreaTotalEdificacao(convert(editText.getText()
//					.toString()));
//			break;
		case 28:
			// Nº de Pavimentos da Edificação");
			dimensao.setNumPavimentacaoEdific(convertInt(editText.getText()
					.toString()));
			break;
//		case 29:
//			// Testada do Imóvel");
//			dimensao.setTestadaImovel(convert(editText.getText().toString()));
//			break;
//		case 30:
//			// "Testada servida por conserv de Calçamento");
//			dimensao.setTestadaServidaConservCalcamento(convert(editText
//					.getText().toString()));
//			break;
//		case 31:
//			// "Testada servida por Iluminação Pública");
//			dimensao.setTestadaServidaPorIluminacaoPublica(convert(editText
//					.getText().toString()));
//			break;
//		case 32:
//			// Testada servida por Limpeza Pública");
//			dimensao.setTestadaServidaLimpezaPublica(convert(editText.getText()
//					.toString()));
//			break;
		case 34:
			// RIP
			imovel.setRip(editText.getText().toString());
			break;
		case 39:
			// "Nº do Registro");
			imovel.setNumeroReg(editText.getText().toString());
			break;
		case 40:
			// "Tempo de moradia");
			imovel.setTempoMoradia(editText.getText().toString());
			break;
		case 41:
			// "Tempo de moradia no municipio");
			imovel.setTempoMoradiaMunicipio(editText.getText().toString());
			break;
		case 45:
			// OBS
			imovel.setObs(editText.getText().toString());
			break;
		default:
			break;
		}
	}

	@Override
	public void onBackPressed() {
		previous(null);
	}

	public void save() {
		getSelect();

		imovelDao.update(imovel);

		if (cont >= 25 && cont <= 32) {

			if (dimensao.getId() == null) {
				dimensaoDao.create(dimensao);
			} else {
				dimensaoDao.update(dimensao);
			}

			imovel.setDimensoes(dimensao);
		}

		imovelDao.update(imovel);

	}

	private void initComponents() {
		radioGroup = new RadioGroup(this);
		linearLayout.removeAllViews();

		editText = new EditText(this);
		editText.setVisibility(EditText.INVISIBLE);

		linearLayout.addView(textTitle);
		linearLayout.addView(editText);

	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.image:
			Intent intent = new Intent(this, GalleryIssues.class);
			intent.putExtra(IMOVEL, imovel);
			startActivity(intent);
			break;
		case R.id.image_capture:
			intent = new Intent(this, CaptureActivity.class);
			intent.putExtras(getIntent());
			startActivityForResult(intent, 100);
			break;
		case R.id.finalizar:
			dialogSituacao();
			break;
		case R.id.sair:
			intent = new Intent(this, MenuActivity.class);
			startActivity(intent);
			try {
				finalize();
			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			break;
		default:
			break;
		}
		return true;
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK) {
			dialogDescription();

			annex = (Annex) data.getSerializableExtra("annex");
			TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
			annex.setUUID(tManager.getDeviceId());

			annex.setImovel(imovel);
			saveResponse(annex);

		}
	}

	public void saveResponse(final Annex annex) {

		final ProgressDialog dialog = ProgressDialog.show(this, "",
				"Carregando...", true);
		new Thread(new Runnable() {
			@Override
			public void run() {
				annex.setContent(encodeImg(annex.getUri()));
				dialog.dismiss();
			}
		}).start();

		annexDao.create(annex);

	}

	private String encodeImg(String str) {
		Uri uri = Uri.parse(str);
		Bitmap decodeSampledBitmapFromResource = Util
				.decodeSampledBitmapFromResource(uri, 500, 500);

		ByteArrayOutputStream bytes = new ByteArrayOutputStream();
		decodeSampledBitmapFromResource.compress(Bitmap.CompressFormat.JPEG,
				100, bytes);
		byte[] b = bytes.toByteArray();

		return android.util.Base64.encodeToString(b,
				android.util.Base64.DEFAULT);

	}

	public void dialogDescription() {
		AlertDialog.Builder editalert = new AlertDialog.Builder(this);

		editalert.setTitle("Descrição da Imagem");
		editalert.setMessage("");

		final EditText input = new EditText(this);
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.FILL_PARENT,
				LinearLayout.LayoutParams.FILL_PARENT);
		input.setLayoutParams(lp);
		editalert.setView(input);

		editalert.setPositiveButton("Confirmar",
				new DialogInterface.OnClickListener() {

					public void onClick(DialogInterface dialog, int whichButton) {
						annex.setDescription(input.getText().toString());
						annexDao.update(annex);
					}
				});

		editalert.show();

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		getMenuInflater().inflate(R.menu.activity_info_geral, menu);
		return true;
	}

	public void finalCadastro() {

		AlertDialog dialog;

		AlertDialog.Builder builder = new AlertDialog.Builder(this);

		builder.setNeutralButton("Finalizar e usar como modelo",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {

						Intent intent = new Intent(getApplicationContext(),
								CreateMainActivity.class);

						imovel.setId(null);

						if (imovel.getEnderecoImovel() != null)
							imovel.getEnderecoImovel().setId(null);
						if (imovel.getEnderecoCorrespondencia() != null)
							imovel.getEnderecoCorrespondencia().setId(null);
						if (imovel.getAnnex() != null) {
							imovel.setAnnex(null);
						}
						if (imovel.getDimensoes() != null) {
							imovel.getDimensoes().setId(null);
						}
						if (imovel.getProprietarios() != null) {
							for (Proprietario p : imovel.getProprietarios()) {
								p.setId(null);
							}
						}

						intent.putExtra(IMOVEL, imovel);

						startActivity(intent);
						finish();

					}
				});

		builder.setPositiveButton("Finalizar",
				new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						
						Intent intent = new Intent(getApplicationContext(),
								MenuActivity.class);
						startActivity(intent);
						finish();

					}
				});

		builder.setNegativeButton("Não", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {

			}
		});

		builder.setMessage("Desejar finalizar o cadastro").setTitle(
				"Cadastro Finalizado");

		dialog = builder.create();
		dialog.show();
	}

	public void next(View view) {
		
		save();

		if (cont >= 1 && (cont < MAX)) {
			cont++;
			if(cont == 39){
				cont++;
			}
			initComponents();
			chooseOne(false);
		} else if (cont >= MAX) {
			stopGps();
			dialogSituacao();
		}

	}

	public void previous(View view) {
		
		save();

		cont = cont > MAX ? MAX : cont;
		if (cont > 1 && cont <= MAX) {
			cont--;
			if(cont == 39){
				cont--;
			}
			initComponents();
			chooseOne(true);
		} else if (cont <= 1) {
			Intent intent = new Intent(getApplicationContext(),
					CorrespondenciaActivity.class);
			intent.putExtra(IMOVEL, imovel);
			startActivity(intent);
			finish();

		}

	}

	private void open(String str) {
		if (str != null && !str.equalsIgnoreCase("null"))
			editText.setText(str);
		editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
		editText.setVisibility(EditText.VISIBLE);
	}

	private OnCheckedChangeListener listener = new OnCheckedChangeListener() {

		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {

			RadioButton radioButton = (RadioButton) group
					.findViewById(checkedId);

			radioButton.getTag();
			int a = 1;
			switch (cont) {
			case 1:
				// "Ocupação"
				imovel.setOcupacao((Ocupacao) radioButton.getTag());
				break;
			case 2:
				// "Topografia");
				imovel.setTopografia((Topografia) radioButton.getTag());
				break;
			case 3:
				// "Situação do Terreno");
				imovel.setSituacaoTerreno((SituacaoTerreno) radioButton
						.getTag());
				break;
			case 4:
				// "Pedologia");
				imovel.setPedologia((Pedologia) radioButton.getTag());
				break;
			case 5:
				// "Utilização");
				imovel.setUtilizacao((Utilizacao) radioButton.getTag());
				break;
			case 6:
				// Isento IPTU");
				imovel.setInsetoIptu((Boolean) radioButton.getTag());
				break;
			case 7:
				// Isento TSU");
				imovel.setInsetoTsu((Boolean) radioButton.getTag());
				break;
			case 8:
				// Uso do Imóvel");
				imovel.setUsoImovel((UsoImovel) radioButton.getTag());
				break;
			// INFORMAÇÕES SOBRE A EDIFICAÇÃO;
			case 9:
				// "Caracterização");
				imovel.setCaracterizacao((Caracterizacao) radioButton.getTag());
				break;
			case 10:
				// Revestimento Externo");
				imovel.setRevExterno((RevExterno) radioButton.getTag());
				break;
			case 11:
				// Piso");
				imovel.setPiso((Piso) radioButton.getTag());
				break;
			case 12:
				// "Forro");
				imovel.setForro((Forro) radioButton.getTag());
				break;
			case 13:
				// Cobertura");
				imovel.setCobertura((Cobertura) radioButton.getTag());
				break;
			case 14:
				// Instalações Sanitária");
				imovel.setInstSanitaria((InstSanitaria) radioButton.getTag());
				break;
			case 15:
				// Posição");
				imovel.setPosicao((Posicao) radioButton.getTag());
				break;
			case 16:
				// Tipo Construção");
				imovel.setTipoConstrucao((TipoConstrucao) radioButton.getTag());
				break;
			case 17:
				// Estrutura");
				imovel.setEstrutura((Estrutura) radioButton.getTag());
				break;
			case 18:
				// Estado de Conservação");
				imovel.setEstadoConservacao((EstadoConservacao) radioButton
						.getTag());
				break;
			case 19:
				// Instalações Elétrica");
				imovel.setInstalacoesEletricas((InstalacoesEletricas) radioButton
						.getTag());
				break;
			case 20:
				// Fachada");
				imovel.setFachada((Fachada) radioButton.getTag());
				break;
			case 21:
				// Calçamento");
				imovel.setCalcamento((Boolean) radioButton.getTag());
				break;
			case 22:
				// Iluminação Pública");
				imovel.setIluminacaoPublica((Boolean) radioButton.getTag());
				break;
			case 23:
				// Limpeza Pública");
				imovel.setLimpezaPublica((Boolean) radioButton.getTag());
				break;
			case 24:
				// Coleta de Lixo");
				imovel.setColetaLixo((Boolean) radioButton.getTag());
				break;
//			case 25:
//				// Área do Terreno");
//				dimensao.setAreaTerreno(convert(editText.getText().toString()));
//				break;
//			case 26:
//				// Área da Unidade");
//				dimensao.setAreaUnidade(convert(editText.getText().toString()));
//				break;
//			case 27:
//				// "Área Total da Edificação");
//				dimensao.setAreaTotalEdificacao(convert(editText.getText()
//						.toString()));
//				break;
			case 28:
				// Nº de Pavimentos da Edificação");
				dimensao.setNumPavimentacaoEdific(convertInt(editText.getText()
						.toString()));
				break;
//			case 29:
//				// Testada do Imóvel");
//				dimensao.setTestadaImovel(convert(editText.getText().toString()));
//				break;
//			case 30:
//				// "Testada servida por conserv de Calçamento");
//				dimensao.setTestadaServidaConservCalcamento(convert(editText
//						.getText().toString()));
//				break;
//			case 31:
//				// "Testada servida por Iluminação Pública");
//				dimensao.setTestadaServidaPorIluminacaoPublica(convert(editText
//						.getText().toString()));
//				break;
//			case 32:
//				// Testada servida por Limpeza Pública");
//				dimensao.setTestadaServidaLimpezaPublica(convert(editText
//						.getText().toString()));
//				break;
			case 33:
				// "Patrimônio");
				imovel.setPatrimonio((Patrimonio) radioButton.getTag());
				break;
			case 34:
				// RIP
				imovel.setRip(editText.getText().toString());
				break;
			case 35:
				// RIP
				imovel.setRipNomeCadastrado((Boolean) radioButton.getTag());
				break;
			case 36:
				// RIP
				imovel.setVinculoTitularRip((Vinculo) radioButton.getTag());
				break;
			case 37:
				// Possui registro de Imóvel");
				imovel.setRegImovel((Boolean) radioButton.getTag());
				break;
			case 38:
				// TIPO REGISTRO
				imovel.setTipoDocumentoImovel((TipoDocumentoImovel) radioButton
						.getTag());
				break;
			case 39:
				// "Nº do Registro");
				imovel.setNumeroReg(editText.getText().toString());
				break;
			case 40:
				// "Tempo de moradia");
				imovel.setTempoMoradia(editText.getText().toString());
				break;
			case 41:
				// "Tempo de moradia municipio");
				imovel.setTempoMoradiaMunicipio(editText.getText().toString());
				break;
			case 42:
				// MInha Casa MInha Vida
				imovel.setMinhaCasaMinhaVida((Boolean) radioButton.getTag());
				break;
			case 43:
				// BOLSA FAMILIA
				imovel.setBolsaFamilia((Boolean) radioButton.getTag());
				break;
			case 44:
				// "Paga IPTU");
				imovel.setPagaIptu((Boolean) radioButton.getTag());
				break;
			case 45:
				// OBS
				imovel.setObs(editText.getText().toString());
				break;
			default:
				break;
			}

		}
	};

	private BigDecimal convert(String string) {
		try {
			return new BigDecimal(string);
		} catch (Exception e) {
			return null;
		}
	}

	private Integer convertInt(String string) {
		try {
			return Integer.parseInt(string);
		} catch (Exception e) {
			return null;
		}
	}

	private void chooseOne(Boolean previous) {
		aux = 0;
		checkId = null;

		if (cont >= 1 && cont <= 9) {
			getActionBar().setTitle("INFORMAÇÕES GERAIS");
		} else if (cont >= 10 && cont <= 20) {
			getActionBar().setTitle("INFORMAÇÕES SOBRE A EDIFICAÇÃO");
		} else if (cont >= 21 && cont <= 24) {
			getActionBar().setTitle("SERVIÇOS URBANOS");
		} else if (cont >= 25 && cont <= 32) {
			getActionBar().setTitle("DIMENSÕES DA UNIDADE");
		} else if (cont >= 33 && cont < 40) {
			getActionBar().setTitle("REGULARIZAÇÃO FUNDIÁRIA");
		} else if (cont >= 40 && cont < 45) {
			getActionBar().setTitle("SOCIOECONÔMICO");
		} else {
			getActionBar().setTitle("OUTROS");
		}
		radioGroup = new RadioGroup(this);

		radioGroup.setOnCheckedChangeListener(listener);

		if (imovel.getPatrimonio() != null) {
			if (cont == 34 && imovel.getPatrimonio() != Patrimonio.UNIAO) {
				if (previous)
					cont--;
				else
					cont++;
			}

			if (cont == 35 && imovel.getPatrimonio() != Patrimonio.UNIAO) {
				if (previous)
					cont--;
				else
					cont++;
			}

			if (cont == 36 && imovel.getPatrimonio() == Patrimonio.UNIAO
					&& imovel.getRipNomeCadastrado() != null
					&& imovel.getRipNomeCadastrado()) {
				if (previous)
					cont--;
				else
					cont++;
			}
			if (cont == 36 && imovel.getPatrimonio() != Patrimonio.UNIAO) {
				if (previous)
					cont -= 3;
				else {
					System.err.println("36++");
					cont++;
				}
			}

			if (cont == 37 && imovel.getPatrimonio() == Patrimonio.UNIAO) {
				if (previous)
					cont--;
				else {
					cont++;
				}
			}

			if (cont == 37
					&& imovel.getPatrimonio() == Patrimonio.UNIAO
					&& (imovel.getRip() != null || !imovel.getRip().trim()
							.isEmpty())) {
				if (previous)
					cont--;
				else
					cont++;
			}
		}
		
		if((cont >= 25 && cont <= 27)){
			if(!previous){
				cont = 28;
			}else{
				cont = 24;
			}
		}else if((cont >= 29 && cont <= 32)){
			if(!previous){
				cont = 33;
			}else{
				cont = 28;
			}
		}

		switch (cont) {
		case 1:
			textTitle.setText("Tipo de Ocupação");
			genOcupacao();
			break;
		case 2:
			textTitle.setText("Topografia do Terreno");
			genTopografia();
			break;
		case 3:
			textTitle.setText("Situação do Terreno");
			genSituacaoTerreno();
			break;
		case 4:
			textTitle.setText("Tipo de Pedologia");
			genPedologia();
			break;
		case 5:
			textTitle.setText("Utilização do Terreno");
			genUtilizacao();
			break;
		case 6:
			textTitle.setText("É Isento IPTU");
			genBoolean(imovel.getInsetoIptu());
			break;
		case 7:
			textTitle.setText("É Isento TSU");
			genBoolean(imovel.getInsetoTsu());
			break;
		case 8:
			textTitle.setText("Qual é o uso do Imóvel");
			genUsoImovel();
			break;
		// INFORMAÇÕES SOBRE A EDIFICAÇÃO;
		case 9:
			textTitle.setText("Caracterização do Imóvel");
			genCaracterizacao();
			break;
		case 10:
			textTitle.setText("Tipo de Revestimento Externo");
			genRevExterno();
			break;
		case 11:
			textTitle.setText("Tipo de Piso");
			genPiso();
			break;
		case 12:
			textTitle.setText("Tipo de Forro");
			genForro();
			break;
		case 13:
			textTitle.setText("Tipo de Cobertura");
			genCobertura();
			break;
		case 14:
			textTitle.setText("Instalações Sanitária");
			genInsSanitaria();
			break;
		case 15:
			textTitle.setText("Posição do Imóvel");
			genPosicao();
			break;
		case 16:
			textTitle.setText("Tipo Construção");
			genTipoConstrucao();
			break;
		case 17:
			textTitle.setText("Estrutura do imóvel");
			genEstrutura();
			break;
		case 18:
			textTitle.setText("Estado de Conservação do Imóvel");
			genEstadoConservacao();
			break;
		case 19:
			textTitle.setText("Tipo de Instalações Elétrica");
			genInstalacoesEletricas();
			break;
		case 20:
			textTitle.setText("Fachada");
			genFachada();
			break;
		case 21:
			textTitle.setText("Existe Calçamento  na rua do imóvel");
			genBoolean(imovel.getCalcamento());
			break;
		case 22:
			textTitle.setText("Existe  Iluminação Pública na rua do imóvel");
			genBoolean(imovel.getIluminacaoPublica());
			break;
		case 23:
			textTitle.setText("Existe Limpeza Pública na rua do imóvel");
			genBoolean(imovel.getLimpezaPublica());
			break;
		case 24:
			textTitle.setText("Existe Coleta de Lixo na rua do imóvel");
			genBoolean(imovel.getColetaLixo());
			break;
//		case 25:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle.setText("Qual é a Área do Terreno");
//			open(dimensao.getAreaTerreno() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27, 29*/
//			//break;
//		case 26:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle.setText("Qual é a Área da Unidade");
//			open(dimensao.getAreaUnidade() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27,29 */
//			//break;
//		case 27:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle.setText("Qual é a Área Total da Edificação");
//			open(dimensao.getAreaTotalEdificacao() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27,29 */
//			//break;
		case 28:
			textTitle.setText("Nº de Pavimentos da Edificação");
			open(dimensao.getNumPavimentacaoEdific() + "");
			break;
//		case 29:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle.setText("Testada do Imóvel (metros)");
//			open(dimensao.getTestadaImovel() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27, 29, 30 */
//			//break;
//		case 30:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle
//					.setText("Testada servida por conserv de Calçamento (metros)");
//			open(dimensao.getTestadaServidaConservCalcamento() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27, 29, 30 */
//			//break;
//		case 31:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle
//					.setText("Testada servida por Iluminação Pública (metros)");
//			open(dimensao.getTestadaServidaPorIluminacaoPublica() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27, 29, 30, 31, 32 */
//			//break;
//		case 32:
//			if(previous){ cont--; }else{ cont++; };
//			textTitle.setText("Testada servida por Limpeza Pública (metros)");
//			open(dimensao.getTestadaServidaLimpezaPublica() + "");
//			/* DESABILITANDO CAMPOS 25, 26, 27, 29, 30, 31, 32 */
//			//break;
		case 33:
			textTitle.setText("Domínio/Propriedade do imóvel");
			genPatrimonio();
			break;
		case 34:
			textTitle.setText("Qual é o nº do RIP");
			// RIP
			open(imovel.getRip());
			break;
		case 35:
			// RIP nome cadastrado
			textTitle.setText("O RIP em nome do proprietário atual");
			genBoolean(imovel.getRipNomeCadastrado());
			break;
		case 36:
			// VINCULO RIP
			textTitle
					.setText("Qual é o vínculo do atual proprietário com o cadastrado na SPU");
			genVinculo();
			break;
		case 37:
			textTitle.setText("Possui registro de imóvel");
			genBoolean(imovel.getRegImovel());
			break;
		case 38:
			// TIPO REGISTRO
			textTitle.setText("Tipo de documento do imóvel");
			genTipoDocumentoImovel();
			break;
		case 39:
			textTitle.setText("Nº do registro");
			open(imovel.getNumeroReg() + "");
			break;
		case 40:
			textTitle.setText("Tempo de moradia (Em anos)");
			open(imovel.getTempoMoradia() + "");
			break;
		case 41:
			textTitle.setText("Tempo de moradia no municipio (Em anos)");
			open(imovel.getTempoMoradiaMunicipio() + "");
			break;
		case 42:
			textTitle.setText("Beneficiado pelo programa \"Minha Casa Minha Vida\"");
			genBoolean(imovel.getMinhaCasaMinhaVida());
			break;
		case 43:
			textTitle.setText("Beneficiado pelo programa \"Bolsa Família\"");
			genBoolean(imovel.getBolsaFamilia());
			break;
		case 44:
			textTitle.setText("Paga IPTU");
			genBoolean(imovel.getPagaIptu());
			break;
		case 45:
			textTitle.setText("Observações");
			open(imovel.getObs() + "");
			break;
		default:
			break;
		}

		linearLayout.addView(radioGroup);
	}

	private void genBoolean(Boolean bool) {

		RadioButton radioButton = new RadioButton(this);

		radioButton.setText("Sim");
		radioButton.setTag(true);

		radioGroup.addView(radioButton);

		radioButton = new RadioButton(this);

		radioButton.setText("Não");
		radioButton.setTag(false);

		radioGroup.addView(radioButton);
		if (bool != null) {
			if (bool)
				radioGroup.check(radioGroup.getChildAt(0).getId());
			else
				radioGroup.check(radioGroup.getChildAt(1).getId());
		}
	}

	private void genCaracterizacao() {
		for (Caracterizacao oc : Caracterizacao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getCaracterizacao() != null
					&& imovel.getCaracterizacao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genCobertura() {
		for (Cobertura oc : Cobertura.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getCobertura() != null && imovel.getCobertura() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genComando() {
		for (Comando oc : Comando.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getComando() != null && imovel.getComando() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genEstadoConservacao() {
		for (EstadoConservacao oc : EstadoConservacao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getEstadoConservacao() != null
					&& imovel.getEstadoConservacao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genEstrutura() {
		for (Estrutura oc : Estrutura.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getEstrutura() != null && imovel.getEstrutura() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genFachada() {
		for (Fachada oc : Fachada.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getFachada() != null && imovel.getFachada() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genForro() {
		for (Forro oc : Forro.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getForro() != null && imovel.getForro() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genInstalacoesEletricas() {
		for (InstalacoesEletricas oc : InstalacoesEletricas.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getInstalacoesEletricas() != null
					&& imovel.getInstalacoesEletricas() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genInsSanitaria() {
		for (InstSanitaria oc : InstSanitaria.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getInstSanitaria() != null
					&& imovel.getInstSanitaria() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genOcupacao() {
		for (Ocupacao oc : Ocupacao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getOcupacao() != null && imovel.getOcupacao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genPatrimonio() {
		for (Patrimonio oc : Patrimonio.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getPatrimonio() != null && imovel.getPatrimonio() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genPedologia() {
		for (Pedologia oc : Pedologia.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getPedologia() != null && imovel.getPedologia() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genPiso() {
		for (Piso oc : Piso.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getPiso() != null && imovel.getPiso() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genPosicao() {
		for (Posicao oc : Posicao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getPosicao() != null && imovel.getPosicao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genRevExterno() {
		for (RevExterno oc : RevExterno.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getRevExterno() != null && imovel.getRevExterno() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genSituacaoTerreno() {
		for (SituacaoTerreno oc : SituacaoTerreno.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getSituacaoTerreno() != null
					&& imovel.getSituacaoTerreno() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genTipoConstrucao() {
		for (TipoConstrucao oc : TipoConstrucao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getTipoConstrucao() != null
					&& imovel.getTipoConstrucao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genTopografia() {
		for (Topografia oc : Topografia.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);

			if (imovel.getTopografia() != null && imovel.getTopografia() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genUsoImovel() {
		for (UsoImovel oc : UsoImovel.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getUsoImovel() != null && imovel.getUsoImovel() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genUtilizacao() {
		for (Utilizacao oc : Utilizacao.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getUtilizacao() != null && imovel.getUtilizacao() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genTipoDocumentoImovel() {
		for (TipoDocumentoImovel oc : TipoDocumentoImovel.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getTipoDocumentoImovel() != null
					&& imovel.getTipoDocumentoImovel() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genDominioTerra() {
		for (DominioTerra oc : DominioTerra.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getDominioTerra() != null
					&& imovel.getDominioTerra() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	private void genVinculo() {
		for (Vinculo oc : Vinculo.values()) {

			RadioButton radioButton = new RadioButton(this);

			radioButton.setText(oc.getNome());
			radioButton.setTag(oc);

			radioGroup.addView(radioButton);
			if (imovel.getVinculoTitularRip() != null
					&& imovel.getVinculoTitularRip() == oc) {
				checkId = aux;
			} else {
				aux++;
			}
		}

		if (checkId != null)
			radioGroup.check(radioGroup.getChildAt(checkId).getId());
	}

	public void startGPS() {

		lManager = (LocationManager) this
				.getSystemService(Context.LOCATION_SERVICE);

		if (!lManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
			Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
			startActivity(intent);
		}

		// Toast.makeText(getApplicationContext(), ("GPS"),
		// Toast.LENGTH_SHORT).show();

		lListener = new LocationListener() {
			public void onLocationChanged(Location locat) {
				imovel.setCoordX(locat.getLatitude());
				imovel.setCoordY(locat.getLongitude());
				contgps++;
				if (contgps >= 3) {
					stopGps();
				}
			}

			public void onStatusChanged(String provider, int status,
					Bundle extras) {
			}

			public void onProviderEnabled(String provider) {
			}

			public void onProviderDisabled(String provider) {
			}
		};

		lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 50, 0,
				lListener);

	}

	private void stopGps() {
		try {
			lManager.removeUpdates(lListener);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void dialogSituacao() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Situação do Imóvel");

		final String[] items = new String[SituacaoImovel.values().length];
		int cont = 0;
		final Map<Integer, SituacaoImovel> map = new HashMap<Integer, SituacaoImovel>();

		for (SituacaoImovel si : SituacaoImovel.values()) {
			items[cont] = si.toString();
			map.put(cont, si);
			cont++;
		}

		builder.setItems(items, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				imovel.setSituacaoImovel(map.get(which));
				save();
				imovel.getSituacaoImovel();
				finalCadastro();
			}
		});

		AlertDialog dialog = builder.create();
		dialog.show();
	}
}
